def max_subarray_sum(nums):
    """
    找出整数数组中子数组之和的最大值

    参数:
        nums: 整数数组

    返回:
        最大子数组之和
    """
    if not nums:
        return 0

    max_current = max_global = nums[0]

    for num in nums[1:]:
        # 要么将当前元素加入到之前的子数组中，要么从当前元素开始新的子数组
        max_current = max(num, max_current + num)
        # 更新全局最大值
        if max_current > max_global:
            max_global = max_current

    return max_global


def get_user_input_array():
    """获取用户输入的整数数组"""
    while True:
        user_input = input("请输入整数数组，元素之间用逗号分隔（例如：1,-2,3,5,-1）：")
        # 处理输入，去除空格并分割
        elements = [elem.strip() for elem in user_input.split(',')]

        try:
            # 转换为整数列表
            nums = [int(elem) for elem in elements]
            if len(nums) == 0:
                print("数组不能为空，请重新输入！")
                continue
            return nums
        except ValueError:
            print("输入格式错误，请确保所有元素都是整数！")


# 测试案例和用户输入功能
if __name__ == "__main__":
    # 预设测试案例
    test_cases = [
        [1, -2, 3, 5, -1],  # 预期输出: 8
        [1, -2, 3, -8, 5, 1],  # 预期输出: 6
        [1, -2, 3, -2, 5, 1]  # 预期输出: 7
    ]

    print("===== 预设测试案例结果 =====")
    for i, case in enumerate(test_cases):
        result = max_subarray_sum(case)
        print(f"测试案例 {i + 1}: {case}")
        print(f"最大子数组和: {result}\n")

    # 用户输入部分
    print("===== 用户自定义数组计算 =====")
    user_array = get_user_input_array()
    result = max_subarray_sum(user_array)
    print(f"\n您输入的数组: {user_array}")
    print(f"该数组的最大子数组和: {result}")
